home *** CD-ROM | disk | FTP | other *** search
/ Developer CD Series 1996 May: Tool Chest / Developer CD Series May 1996 (Tool Chest) (Apple Computer) (1996).iso / Tool Chest / Development Tools & Languages / • Other Platforms / PCCTS 1.31 / testcpp / 11 / test.g < prev   
Encoding:
Text File  |  1995-03-10  |  1.4 KB  |  85 lines  |  [TEXT/MPS ]

  1. /* This is test.g which tests multiple scanners/parsers; DLG-based scanner;
  2.  * also, we test multiple lexical classes.
  3.  */
  4. <<
  5. #include "Lexer.h"
  6. typedef ANTLRCommonToken ANTLRToken;
  7.  
  8. int main()
  9. {
  10.     ANTLRToken aToken;
  11.     DLGFileInput in(stdin);
  12.     Lexer scan(&in,2000);
  13.     ANTLRTokenBuffer pipe(&scan);
  14.     scan.setToken(&aToken);
  15.     Include parser(&pipe);
  16.     parser.init();
  17.  
  18.     parser.input();
  19.     return 0;
  20. }
  21. >>
  22.  
  23. #token "[\ \t\n]+"    <<skip();>>
  24.  
  25. #lexclass START
  26.  
  27. class Include {
  28.  
  29. <<
  30. /* this is automatically defined to be a member function of Include::
  31.  * since it is within the "class {...}" boundaries.
  32.  */
  33. private:
  34. char *stripquotes(ANTLRChar *s)
  35. {
  36.     s[strlen(s)-1] = '\0';
  37.     return &s[1];
  38. }
  39. >>
  40.  
  41. input
  42.     :    ( cmd | include )* "@"
  43.     ;
  44.  
  45. cmd    :    "print"
  46.         (    NUMBER        <<printf("%s\n", $1->getText());>>
  47.         |    STRING        <<printf("%s\n", $1->getText());>>
  48.         )
  49.     ;
  50.  
  51. include
  52.     :    "#data" STRING
  53.         <<{
  54.         FILE *f;
  55.         f = fopen(stripquotes($2->getText()), "r");
  56.         if ( f==NULL ) {fprintf(stderr, "can't open %s\n", $2->getText()+1);}
  57.         else {
  58.             ANTLRToken aToken;
  59.             DLGFileInput in(f);
  60.             Lexer scan(&in);
  61.             scan.setToken(&aToken);
  62.             scan.mode(Lexer::DATA);
  63.             ANTLRTokenBuffer pipe(&scan);
  64.             Include parser(&pipe);
  65.             parser.init();
  66.             parser.data();
  67.         }
  68.         }>>
  69.     ;
  70.  
  71. #lexclass DATA
  72.  
  73. #token "[\ \t\n]+"    <<skip();>>
  74.  
  75. data:    "0x[0-9]+" ":" "0x[0-9]+"
  76.         <<printf("data %s\n", $1->getText());>>
  77.     ;
  78.  
  79. }
  80.  
  81. #lexclass START
  82.  
  83. #token STRING    "\" [a-zA-Z0-9_.,\ \t]+ \""
  84. #token NUMBER    "[0-9]+"
  85.